home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 320 / compsrc2 / gnulib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-10-20  |  4.2 KB  |  322 lines

  1. /* Subroutines needed by GCC output code on some machines.  */
  2. /* Compile this file with the Unix C compiler!  */
  3.  
  4. #include "config.h"
  5.  
  6. /* These definitions work for machines where an SF value is
  7.    returned in the same register as an int.  */
  8.  
  9. #ifndef SFVALUE  
  10. #define SFVALUE int
  11. #endif
  12.  
  13. #ifndef INTIFY
  14. #define INTIFY(FLOATVAL)  (intify.f = (FLOATVAL), intify.i)
  15. #endif
  16.  
  17. union double_di { double d; int i[2]; };
  18. union flt_or_int { int i; float f; };
  19.  
  20. #ifdef WORDS_BIG_ENDIAN
  21. #define HIGH 0
  22. #define LOW 1
  23. #else
  24. #define HIGH 1
  25. #define LOW 0
  26. #endif
  27.  
  28. #ifdef L_eprintf
  29. #include <stdio.h>
  30. /* This is used by the `assert' macro.  */
  31. void
  32. _eprintf (string, line)
  33.      char *string;
  34.      int line;
  35. {
  36.   fprintf (stderr, string, line);
  37. }
  38. #endif
  39.  
  40. #ifdef L_umulsi3
  41. _umulsi3 (a, b)
  42.      unsigned a, b;
  43. {
  44.   return a * b;
  45. }
  46. #endif
  47.  
  48. #ifdef L_mulsi3
  49. _mulsi3 (a, b)
  50.      int a, b;
  51. {
  52.   return a * b;
  53. }
  54. #endif
  55.  
  56. #ifdef L_udivsi3
  57. _udivsi3 (a, b)
  58.      unsigned a, b;
  59. {
  60.   return a / b;
  61. }
  62. #endif
  63.  
  64. #ifdef L_divsi3
  65. _divsi3 (a, b)
  66.      int a, b;
  67. {
  68.   return a / b;
  69. }
  70. #endif
  71.  
  72. #ifdef L_umodsi3
  73. _umodsi3 (a, b)
  74.      unsigned a, b;
  75. {
  76.   return a % b;
  77. }
  78. #endif
  79.  
  80. #ifdef L_modsi3
  81. _modsi3 (a, b)
  82.      int a, b;
  83. {
  84.   return a % b;
  85. }
  86. #endif
  87.  
  88. #ifdef L_lshrsi3
  89. _lshrsi3 (a, b)
  90.      unsigned a, b;
  91. {
  92.   return a >> b;
  93. }
  94. #endif
  95.  
  96. #ifdef L_lshlsi3
  97. _lshlsi3 (a, b)
  98.      unsigned a, b;
  99. {
  100.   return a << b;
  101. }
  102. #endif
  103.  
  104. #ifdef L_ashrsi3
  105. _ashrsi3 (a, b)
  106.      int a, b;
  107. {
  108.   return a >> b;
  109. }
  110. #endif
  111.  
  112. #ifdef L_ashlsi3
  113. _ashlsi3 (a, b)
  114.      int a, b;
  115. {
  116.   return a << b;
  117. }
  118. #endif
  119.  
  120. #ifdef L_divdf3
  121. double
  122. _divdf3 (a, b)
  123.      double a, b;
  124. {
  125.   return a / b;
  126. }
  127. #endif
  128.  
  129. #ifdef L_muldf3
  130. double
  131. _muldf3 (a, b)
  132.      double a, b;
  133. {
  134.   return a * b;
  135. }
  136. #endif
  137.  
  138. #ifdef L_negdf2
  139. double
  140. _negdf2 (a)
  141.      double a;
  142. {
  143.   return -a;
  144. }
  145. #endif
  146.  
  147. #ifdef L_adddf3
  148. double
  149. _adddf3 (a, b)
  150.      double a, b;
  151. {
  152.   return a + b;
  153. }
  154. #endif
  155.  
  156. #ifdef L_subdf3
  157. double
  158. _subdf3 (a, b)
  159.      double a, b;
  160. {
  161.   return a - b;
  162. }
  163. #endif
  164.  
  165. #ifdef L_cmpdf2
  166. int
  167. _cmpdf2 (a, b)
  168.      double a, b;
  169. {
  170.   if (a > b)
  171.     return 1;
  172.   else if (a < b)
  173.     return -1;
  174.   return 0;
  175. }
  176. #endif
  177.  
  178. #ifdef L_fixunsdfsi
  179. _fixunsdfsi (a)
  180.      double a;
  181. {
  182.   return (unsigned int) a;
  183. }
  184. #endif
  185.  
  186. #ifdef L_fixunsdfdi
  187. double
  188. _fixunsdfdi (a)
  189.      double a;
  190. {
  191.   union double_di u;
  192.   u.i[LOW] = (unsigned int) a;
  193.   u.i[HIGH] = 0;
  194.   return u.d;
  195. }
  196. #endif
  197.  
  198. #ifdef L_fixdfsi
  199. _fixdfsi (a)
  200.      double a;
  201. {
  202.   return (int) a;
  203. }
  204. #endif
  205.  
  206. #ifdef L_fixdfdi
  207. double
  208. _fixdfdi (a)
  209.      double a;
  210. {
  211.   union double_di u;
  212.   u.i[LOW] = (int) a;
  213.   u.i[HIGH] = (int) a < 0 ? -1 : 0;
  214.   return u.d;
  215. }
  216. #endif
  217.  
  218. #ifdef L_floatsidf
  219. double
  220. _floatsidf (a)
  221.      int a;
  222. {
  223.   return (double) a;
  224. }
  225. #endif
  226.  
  227. #ifdef L_floatdidf
  228. double
  229. _floatdidf (u)
  230.      union double_di u;
  231. {
  232.   register double hi
  233.     = ((double) u.i[HIGH]) * (double) 0x10000 * (double) 0x10000;
  234.   register double low = (unsigned int) u.i[LOW];
  235.   return hi + low;
  236. }
  237. #endif
  238.  
  239. #ifdef L_addsf3
  240. SFVALUE
  241. _addsf3 (a, b)
  242.      union flt_or_int a, b;
  243. {
  244.   union flt_or_int intify;
  245.   return INTIFY (a.f + b.f);
  246. }
  247. #endif
  248.  
  249. #ifdef L_negsf2
  250. SFVALUE
  251. _negsf2 (a)
  252.      union flt_or_int a;
  253. {
  254.   union flt_or_int intify;
  255.   return INTIFY (-a.f);
  256. }
  257. #endif
  258.  
  259. #ifdef L_subsf3
  260. SFVALUE
  261. _subsf3 (a, b)
  262.      union flt_or_int a, b;
  263. {
  264.   union flt_or_int intify;
  265.   return INTIFY (a.f - b.f);
  266. }
  267. #endif
  268.  
  269. #ifdef L_cmpsf2
  270. SFVALUE
  271. _cmpsf2 (a, b)
  272.      union flt_or_int a, b;
  273. {
  274.   union flt_or_int intify;
  275.   if (a.f > b.f)
  276.     return 1;
  277.   else if (a.f < b.f)
  278.     return -1;
  279.   return 0;
  280. }
  281. #endif
  282.  
  283. #ifdef L_mulsf3
  284. SFVALUE
  285. _mulsf3 (a, b)
  286.      union flt_or_int a, b;
  287. {
  288.   union flt_or_int intify;
  289.   return INTIFY (a.f * b.f);
  290. }
  291. #endif
  292.  
  293. #ifdef L_divsf3
  294. SFVALUE
  295. _divsf3 (a, b)
  296.      union flt_or_int a, b;
  297. {
  298.   union flt_or_int intify;
  299.   return INTIFY (a.f / b.f);
  300. }
  301. #endif
  302.  
  303. #ifdef L_truncdfsf2
  304. SFVALUE
  305. _truncdfsf2 (a)
  306.      double a;
  307. {
  308.   union flt_or_int intify;
  309.   return INTIFY (a);
  310. }
  311. #endif
  312.  
  313. #ifdef L_extendsfdf2
  314. double
  315. _extendsfdf2 (a)
  316.      union flt_or_int a;
  317. {
  318.   union flt_or_int intify;
  319.   return a.f;
  320. }
  321. #endif
  322.